package com.yy.job.core.config.xml;

import java.util.List;
import java.util.Map;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import org.apache.commons.collections.CollectionUtils;

import com.google.common.collect.Maps;

/**
 * xml根节点
 * 
 * @author eleven.li
 *
 */
@XmlRootElement(name = "yyJobProject")
@XmlAccessorType(XmlAccessType.FIELD)
public class ProjectXmlConfig implements IXmlConfig {
	
	@XmlAttribute
	private String projectCode;
	
	@XmlElement(name = "moduleConfig")
	private List<ModuleXmlConfig> moduleConfigs;

	private Map<String, ModuleXmlConfig> moduleMap;

	@Override
	public void build() {
		if (moduleMap == null) {
			moduleMap = Maps.newHashMap();
		}
		if (CollectionUtils.isEmpty(moduleConfigs)) {
			return;
		}
		for (ModuleXmlConfig config : moduleConfigs) {
			config.build();
			moduleMap.put(config.getModuleCode(), config);
		}
	}

	public List<ModuleXmlConfig> getModuleConfigs() {
		return moduleConfigs;
	}

	public void setModuleConfigs(List<ModuleXmlConfig> moduleConfigs) {
		this.moduleConfigs = moduleConfigs;
	}

	public Map<String, ModuleXmlConfig> getModuleMap() {
		return moduleMap;
	}

	public void setModuleMap(Map<String, ModuleXmlConfig> moduleMap) {
		this.moduleMap = moduleMap;
	}

	public String getProjectCode() {
		return projectCode;
	}

	public void setProjectCode(String projectCode) {
		this.projectCode = projectCode;
	}

	public ModuleXmlConfig findByModuleCode(String moduleCode) {
		return this.moduleMap.get(moduleCode);
	}

	public JobXmlConfig findJobConfig(String moduleCode, String jobCode) {
		ModuleXmlConfig moduleXmlConfig = this.findByModuleCode(moduleCode);
		if (moduleXmlConfig == null) {
			return null;
		}
		return moduleXmlConfig.findByJobCode(jobCode);
	}

}
